package docker

//安装运行redis

/*

目录：
	1.安装
	2.配置
	3.操作


--------------安装--------------

	docker pull redis

	查看redis的版本

	docker inspect redis | grep -i version

root@VM-4-8-debian:~# docker inspect redis | grep -i version
                "GOSU_VERSION=1.12",
                "REDIS_VERSION=6.2.6",
        "DockerVersion": "20.10.7",
                "GOSU_VERSION=1.12",
                "REDIS_VERSION=6.2.6",	#redis 的版本是6.2.6
root@VM-4-8-debian:~#

到docker官网查看docker的版本  https://hub.docker.com/_/redis
发现是最新版是 7.0.5，如果要安装最新版

root@VM-4-8-debian:~#	docker pull redis:7.0.5



--------------配置  redis的配置文件--------------

	mkdir -p /home/zydh/docker/etc/redis


	创建Redis配置文件
			1.启动前需要先创建Redis外部挂载的配置文件 （ /home/zydh/docker/etc/redis/redis.conf ）
			2.之所以要先创建 , 是因为Redis本身容器只存在 /etc/redis 目录 , 本身就不创建 redis.conf 文件
			3.当服务器和容器都不存在 redis.conf 文件时, 执行启动命令的时候 docker 会将 redis.conf 作为目录创建 , 这并不是我们想要的结果


root@VM-4-8-debian:/home/zydh/docker/etc/redis# touch redis.conf


	根据上述所述，redis根本就没有redis.conf，解决如下：
	1.打开地址  https://redis.io/docs/manual/config/
	2.下拉找到redis.conf配置文件，找到对应的版本6.2 or 7.0
	3.点击所需要的版本 注意：需要翻墙
	4.页面显示所有redis.conf配置，只需要把内容拷贝到自己创建的touch  redis.conf即可



	（找到该目录下 redis.conf的版本，把内容拷贝到服务器上的redis.conf）
	皆为原版，


root@VM-4-8-debian:/home/zydh/docker/etc/redis# vim redis.conf	#把官方配置的redis.conf复制进入新建得redis.conf文件
root@VM-4-8-debian:/home/zydh/docker/etc/redis# cp redis.conf  redis.conf.back   #拷贝一份


	修改/home/zydh/docker/etc/redis/redis.conf里的配置

		1.开启redis验证  可选
			requirepass 123



		2.允许redis外地(非本地127.0.0.1)链接，设置所有IP都可以访问 (docker貌似自动开启了)
		注释掉 bind 127.0.0.1
		#bind 127.0.0.1
		or
		bind 0.0.0.0



		3.	后台启动，将daemonize yes 注释起来或者 daemonize on设置，因为该配置和docker run 中的-d 参宿冲突，会导致容器一直一直失败
			daemonize on



		4.启动Redis持久化功能 (默认 no , 所有信息都存储在内存 [重启丢失] 。 设置为 yes , 将存储在硬盘 [重启还在])
			appendonly yes



		5.关闭protected-mode模式，此时外部网络可以直接访问 (docker貌似自动开启了)
			protected-mode no





	https://hub.docker.com/_/redis
	官方直接搜 redis.conf  ,发现

	FROM redis
	COPY redis.conf /usr/local/etc/redis/redis.conf		//##将本地的redis.conf拷贝到容器里
	CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]

	$ docker run -v /myredis/conf:/usr/local/etc/redis --name myredis redis redis-server /usr/local/etc/redis/redis.conf


	/myredis/conf
			1.其中/myredis/conf/是一个包含您的redis.conf文件的本地目录。使用此方法意味着您不需要为redis容器提供文档文件。
			2.映射的目录应该是可写的，因为根据配置和操作模式，Redis可能需要创建额外的配置文件或重写现有的配置文件。






	---最后---

	docker run -d -p 6377:6379 --name myredis  --privileged=true  \
		-v /home/zydh/docker/etc/redis/redis.conf:/etc/redis/redis.conf	\
		-v /home/zydh/docker/volume/redis:/data	\
		redis   redis-server /etc/redis/redis.conf




	命令											描述
	–name redis										启动容器的名字
	-d												后台运行
	-p 6379:6379									将容器的 6379(后面那个) 端口映射到主机的 6379(前面那个) 端口
	–restart unless-stopped							容器重启策略 –restart unless-stopped : 在docker重启时重启当前容器。但不包含docker重启时已停止的容器。
	-v /mydata/redis/data:/data						将Redis储存文件夹挂在到主机
	-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf	将配置文件夹挂在到主机
	-d redis:buster									启动哪个版本的 Redis (本地镜像的版本)
	redis-server /etc/redis/redis.conf				Redis 容器中设置 redis-server 每次启动读取 /etc/redis/redis.conf 这个配置为准
	\	shell 命令换行


	举例：
		docker run --restart=always --log-opt max-size=100m --log-opt max-file=2
			-p 6379:6379
			--name myredis
			-v /opt/myredis/redis.conf:/etc/redis/redis.conf
			-v /opt/myredis/data:/data -d redis redis-server /etc/redis/redis.conf
			--appendonly yes
			--requirepass rootroot




--------------操作--------------


### 查看Docker运行中的容器
docker ps
docker ps | grep redis




### 通过 Docker 命令进入 Redis 容器内部
docker exec -it redis /bin/bash
docker exec -it redis bash
### 进入 Redis 控制台
redis-cli
### 添加一个变量为 key 为 name , value 为 bella 的内容
> set name bella
### 查看 key 为 name 的 value 值
> get name


### 或者也可以直接通过Docker Redis 命令进入Redis控制台 (上面两个命令的结合)
docker exec -it redis redis-cli


##退出容器
exit


##进入有密码的Redis控制台

## 进入Redis容器
docker exec -it redis /bin/bash

## 通过密码进入Redis控制台
redis-cli -h 127.0.0.1 -p 6379 -a 123456



*/
